package sunyu.controller.editor;


import org.slf4j.Logger;
import sunyu.toolkit.core.LogKit;
import sunyu.toolkit.core.StringKit;
import sunyu.toolkit.core.TimeKit;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 与spring mvc的@InitBinder结合
 * <p>
 * 转换前台的字符串格式的日期值给后台使用
 *
 * @author 孙宇
 */
public class DateTimePropertyEditorSupport extends PropertyEditorSupport {

    private static final Logger logger = LogKit.getLogger();

    private static final List<String> dateTimeFormats = new ArrayList<String>() {{
        add("yyyy-MM-dd HH:mm:ss");
        add("yyyy-MM-dd HH:mm");
        add("yyyy-MM-dd HH");
        add("yyyy-MM-dd");

        add("yyyyMMddHHmmss");
        add("yyyyMMddHHmm");
        add("yyyyMMddHH");
        add("yyyyMMdd");

        add("yyyy年MM月dd日 HH时mm分ss秒");
        add("yyyy年MM月dd日 HH时mm分");
        add("yyyy年MM月dd日 HH时");
        add("yyyy年MM月dd日");
    }};

    public DateTimePropertyEditorSupport() {
    }

    @Override
    public String getAsText() {
        Date value = (Date) getValue();
        return (value != null ? TimeKit.format("yyyy-MM-dd HH:mm:ss", value) : "");
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text == null || StringKit.isBlank(text)) {
            setValue(null);
        } else {
            for (String f : dateTimeFormats) {
                try {
                    setValue(TimeKit.parse(f, StringKit.trim(text)));
                    break;
                } catch (ParseException e) {
                    //logger.error(ExceptionKit.getStackTrace(e));
                }
            }
        }
    }

}
